<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Microprogrammation</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Microprogrammation"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Microprogrammation rootpage-Microprogrammation skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Microprogrammation</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p>La <b>microprogrammation</b> est une technique de réalisation du <a href="Unit%C3%A9_de_contr%C3%B4le" title="Unité de contrôle">séquenceur</a> d'un <a href="Processeur" title="Processeur">processeur</a>, utilisé dans la technologie <a href="Complex_instruction_set_computing" class="mw-redirect" title="Complex instruction set computing">CISC</a>, dans laquelle le comportement du séquenceur est décrit par le contenu d'une mémoire. Ce contenu est appelé <b>microprogramme</b> ou <b>microcode</b>. Il peut être vu comme un programme destiné à une machine très simple appelée micro-séquenceur ; le processeur final est alors considéré comme une <a href="Machine_virtuelle" title="Machine virtuelle">machine virtuelle</a> simulée par le micro-séquenceur. Par opposition la technologie <a href="Reduced_instruction_set_computing" class="mw-redirect" title="Reduced instruction set computing">RISC</a> ne contient pas de microcode.
</p><p>La réalisation microprogrammée des séquenceurs s'oppose à leur réalisation câblée. A priori plus onéreuse au départ, sa souplesse facilite l'évolution des modèles.
</p>
<div class="mw-heading mw-heading2"><h2 id="Principe">Principe</h2></div>
<p>Le séquenceur d'un processeur est un <a href="Automate_fini" title="Automate fini">automate fini</a> qui contrôle le fonctionnement du <a href="Chemin_de_donn%C3%A9es" title="Chemin de données">chemin de données</a> : notamment l'<a href="Unit%C3%A9_arithm%C3%A9tique_et_logique" title="Unité arithmétique et logique">unité arithmétique et logique</a> (UAL), les <a href="Registre_de_processeur" title="Registre de processeur">registres</a>, etc.
</p><p>Une approche consiste à réaliser cet automate à l'aide d'un circuit logique combinatoire, qui prend en entrée l'état du chemin de données ainsi que des signaux d'horloge, et fournit en sortie les signaux de commande à destination du chemin de données. Ce circuit logique est réalisé à l'aide d'un ensemble de <a href="Fonction_logique" title="Fonction logique">portes logiques</a>. Cette technique est dite du <a href="Unit%C3%A9_de_contr%C3%B4le#Séquenceur_câblé" title="Unité de contrôle">séquenceur câblé</a>.
</p><p>On peut cependant remarquer qu'un circuit logique combinatoire peut être réalisé à l'aide d'une mémoire utilisée en lecture (typiquement une <a href="M%C3%A9moire_morte" title="Mémoire morte">mémoire morte</a>), à laquelle les signaux d'entrée sont fournis en tant qu'adresses, et dont les mots fournis en sortie sont interprétés comme des signaux de sortie. Il est donc possible de remplacer le circuit combinatoire ci-dessus par une mémoire : c'est l'idée qui se trouve à la base de la microprogrammation. Les cases successives de la mémoire sont vues comme des instructions élémentaires ou micro-instructions ; leur ensemble constitue le microprogramme ou microcode.
</p><p>Il est possible de complexifier ce schéma simpliste en ajoutant la possibilité d'effectuer des sauts entre micro-instructions. De plus, on introduit en général un registre contenant l'adresse de la prochaine micro-instruction à traiter : le micro-<a href="Compteur_ordinal" title="Compteur ordinal">compteur ordinal</a>. Il existe donc une logique simple — et câblée — chargée de dérouler le microprogramme : on l'appelle le micro-séquenceur.
</p><p>Le code machine — les instructions, que l'on peut qualifier de macro-instructions pour bien les distinguer des micro-instructions — sont donc interprétées par le micro-séquenceur qui exécute le microcode. Plusieurs micro-instructions sont exécutées pour réaliser une (macro)-instruction.
</p><p>Il y a deux techniques d'implémentation du microcode :
</p>
<ol><li>Le microcode <i>horizontal</i>, qui utilise un nombre très grand de bits pour contrôler tous les éléments du processeur. Sur l'<a href="IBM" title="IBM">IBM</a> 360 modèle 30 par exemple, une micro-instruction fait 60 bits.</li>
<li>Le microcode <i>vertical</i>, qui occupe beaucoup moins de bits car il contient une partie spécifiant l'unité à contrôler, et une autre qui sera la commande envoyée à cette unité.</li></ol>
<p>Les architectures basées sur des microprocesseurs en tranches sont microcodées.
</p>
<div class="mw-heading mw-heading2"><h2 id="Avantages_et_inconvénients_des_machines_microcodées"><span id="Avantages_et_inconv.C3.A9nients_des_machines_microcod.C3.A9es"></span>Avantages et inconvénients des machines microcodées</h2></div>
<ul><li>Les avantages sont (entre autres) :
<ul><li>évolutivité du jeu d'instructions</li>
<li>simplicité du design</li>
<li>correction possible des erreurs de conception matérielle par modification du microcode</li></ul></li>
<li>Les inconvénients sont (entre autres) :
<ul><li>possibilités de <a href="Bug_(informatique)" title="Bug (informatique)">bugs</a> dans le microcode</li>
<li>lenteur de la machine (plusieurs <a href="Signal_d'horloge" title="Signal d'horloge">cycles d'horloge</a> pour exécuter une instruction en <a href="Langage_machine" title="Langage machine">code machine</a> (ou son équivalent en <a href="Assembleur" title="Assembleur">assembleur</a>)).</li></ul></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Exemple_d'ordinateurs_microcodés"><span id="Exemple_d.27ordinateurs_microcod.C3.A9s"></span>Exemple d'ordinateurs microcodés</h2></div>
<ul><li><a href="Digital_Equipment_Corporation" title="Digital Equipment Corporation">DEC</a> <a href="PDP-10" title="PDP-10">PDP-10</a>, <a href="VAX" title="VAX">VAX</a> (16 <a href="Octet" title="Octet">Kmots</a> de 42 <a href="Bit" title="Bit">bits</a>)…</li>
<li><a href="IBM_360_et_370" title="IBM 360 et 370">IBM 360 et 370</a> : les modèles de base étaient microprogrammés ; les modèles haut de gamme avaient un séquenceur câblé (IBM 360 modèles 44, 75, 91, 95, et 195)</li>
<li>Burroughs 1600</li>
<li><a href="Compagnie_internationale_pour_l'informatique" title="Compagnie internationale pour l'informatique">Cii Mitra 15</a></li>
<li><a href="T%C3%A9l%C3%A9m%C3%A9canique" title="Télémécanique">Télémécanique T 1600</a></li>
<li><a href="Motorola_68000" title="Motorola 68000">Motorola 68000</a></li>
<li><a href="Intel_8080" title="Intel 8080">Intel 8080</a>, <a href="Intel_8086" title="Intel 8086">8086</a>…</li>
<li><a href="Zilog_Z80" title="Zilog Z80">Zilog Z80</a></li>
<li><a href="System_i" title="System i">System i (AS/400)</a></li>
<li>…</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<ul><li>Le terme <a href="Firmware" title="Firmware">micrologiciel</a>, qui désigne plus généralement un logiciel intégré généralement sur une <a href="M%C3%A9moire_flash" title="Mémoire flash">mémoire flash</a> d'un <a href="P%C3%A9riph%C3%A9rique_informatique" title="Périphérique informatique">périphérique</a> ou <a href="Composant_%C3%A9lectronique" title="Composant électronique">composant électronique</a>.</li>
<li><a href="Micro%3Abit" title="Micro:bit">Micro:bit</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Référence"><span id="R.C3.A9f.C3.A9rence"></span>Référence</h2></div>
<ul><li>G. Boulaye, 1971, <i>La Microprogrammation</i>, Dunod. <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">2040025960</span>)</small>, <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a> <span class="nowrap">978-2040025960</span>)</small></li>
<li><span class="ouvrage" id="Shirriff2022"><span class="ouvrage" id="Ken_Shirriff2022">Ken <span class="nom_auteur">Shirriff</span>, « <a rel="nofollow" class="external text" href="https://www.righto.com/2022/11/how-8086-processors-microcode-engine.html"><cite style="font-style:normal;">How the 8086 processor's microcode engine works</cite></a> », <time class="nowrap" datetime="2022-12" data-sort-value="2022-12">décembre 2022</time></span></span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Liens_externes">Liens externes</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://www.cs.clemson.edu/~mark/uprog.html">A Brief History of Microprogramming</a> (en anglais).</li>
<li><a rel="nofollow" class="external text" href="http://www.thebattles.net/wang/uarch.html">Wang 2200 Microarchitecture Description</a> (en anglais).</li></ul>
<div class="navbox-container" style="clear:both;">
</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2024-12-01" href="https://fr.wikipedia.org/wiki/?title=Microprogrammation&oldid=220765200">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>